package com.zhang.factory.example;

import java.util.HashMap;

/**
 * @author ElloeStudy(Sifa Zhang)
 * @create 2022-03-01 17:06
 * To: 真常应物，真常得性，常清常静，常清静矣
 */

// 懒加载（延迟加载）
public class HumanFactory2 {
    // 定义一个map ， 初始化过的Human都放在这里
    private static HashMap<String,Human> humans = new HashMap<>();

    // 创造人种
    public static Human createHuman(Class c) {
        Human human = null;
        try {
            // 如果创建过这个对象，直接从里面取出，不需要初始化了
            if (humans.containsKey(c.getSimpleName())) {
                human = humans.get(c.getSimpleName());
            } else {
                human = (Human) Class.forName(c.getName()).newInstance();
                // 放到 Map里面
                humans.put(c.getSimpleName(), human);
            }
        } catch (InstantiationException e) {
            System.out.println("必须指定人种的颜色");
        } catch (IllegalAccessException e) {
            System.out.println("人种定义错误");
        } catch (ClassNotFoundException e) {
            System.out.println("混蛋，找不到你指定的人");
        }
        return human;
    }
}
